// 引入wechat-http
import http from 'wechat-http'
// // 配置基础base地址
http.baseURL = 'https://live-api.itheima.net'
// 配置响应拦截器
http.intercept.response = async ({ statusCode, data }) => {
  //判断状态码是否为401
  if (statusCode === 401) {
    if (config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      //读取当前页面路径,登陆成功就能跳转到该页面,拿的是当前页面栈最后一个
      const latstPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径,如果登陆成功就跳转到该页面
      const redirectURL = latstPage.route
      // 再引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    //获取全局应用实例
    const app = getApp()
    //使用refreshTok更新token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      // 这里注意是refresh_token,因为token失效了,要用refresh_token去获取token
      header: {
        Authorization: app.refresh_token,
      },
    })
    //更新token和refresh_token
    app.setToken(res.data.token, res.data.refresh_token)
    //重新发送请求实现无感刷新
    return http(
      Object.assign(config, {
        // 传递新的 token
        header: {
          Authorization: app.token,
        },
      })
    )
  }
  return data
}
//配置请求拦截器
http.intercept.request = (params) => {
  // 读取全局实例中的token
  const { token } = getApp()
  //初始为空对象,后续可扩展的公共头的信息
  const defaultHeader = {}
  // 追加token头信息
  if (token) defaultHeader.Authorization = token
  // 合并自定义头信息和公共头信息
  params.header = Object.assign(defaultHeader, params.header)
  // 处理后的请求参数
  return params
}
// 挂载到全局
wx.http = http
// 模块导出
export default http
